﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Web.Framework;
using PlanProd.Contracts;
using WebAppPlanProduccion.Code;
using WebAppPlanProduccion.Code.Security;
using PlanProd.Contracts.Search;
using Web.Framework.Mapper;
using System.Text;

namespace WebAppPlanProduccion.App
{
    public partial class ProductoEdit : BasePage
    {
        public Producto ProductoCurrent
        {
            get
            {
                return (Producto)ViewState["ProductoCurrent"];
            }
            set
            {
                ViewState["ProductoCurrent"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            HasPermissionToSeeMe(PlanProdSecurity.PRODUCTO_VER);

            try
            {
                if (!this.IsPostBack)
                {
                    if (this.Request.QueryString["Id"] == null)
                    {
                        ProductoCurrent = new Producto();
                    }
                    else
                    {
                        SearchProductCriteria search = new SearchProductCriteria();
                        search.Id = Convert.ToInt32(this.Request.QueryString["Id"]);
                        ProductoCurrent = WebServiceHelper.SearchProducts(WebServiceHelper.ServiceOptionsDefault, search).Productos.First();
                    }

                    Bind();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected override void ApplySecurity()
        {
            //this.lnkGuardar.Visible = HasPermissionFor(PlanProdSecurity.TEMPORADA_EDITAR);
        }

        private void Bind()
        {
            if (ProductoCurrent.Id != 0)
            {
                EntityMapper.Map(ProductoCurrent, this);        

                if(ProductoCurrent.FechaSincronizacion.HasValue)
                {
                    txtFechaSincronizacion.Text = ProductoCurrent.FechaSincronizacion.Value.ToString("dd/MM/yyyy HH:mm");
                }
            }
        }

        private void SetData()
        {           
        }

        private void Save()
        {
            //ProductoCurrent = WebServiceHelper.SaveTemporada(ProductoCurrent);
        }

        private bool Validar()
        {
            //if (ProductoCurrent.FechaDesde > ProductoCurrent.FechaHasta)
            //{
            //    this.masterPage.ShowMessage("La fecha desde debe ser menor a la fecha hasta", WebMessageType.Error);
            //    return false;
            //}

            return true;
        }

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            //try
            //{
            //    SetData();
            //    if (Validar())
            //    {
            //        Save();
            //        Response.Redirect("/App/TemporadaList.aspx", true);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    ExceptionManager.Instance.HandleException(ex);
            //}
        }

        protected void lnkSincronizar_Click(object sender, EventArgs e)
        {
            try
            {
                // Actualizar productos contra SAP
                List<Producto> productosAActualizar = new List<Producto>();
                productosAActualizar.Add(ProductoCurrent);
                StringBuilder mensajeBuilder = ActualizarProductosConSap(productosAActualizar);
                this.masterPage.ShowMessage(mensajeBuilder.ToString(), WebMessageType.Notification);

                SearchProductCriteria search = new SearchProductCriteria();
                search.Id = Convert.ToInt32(this.Request.QueryString["Id"]);
                ProductoCurrent = WebServiceHelper.SearchProducts(WebServiceHelper.ServiceOptionsDefault, search).Productos.First();
                Bind();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private StringBuilder ActualizarProductosConSap(List<Producto> productosAActualizar)
        {
            List<Producto> productosResultado = WebServiceHelper.ActualizarProductos(productosAActualizar, BaseWebPage.CompanyId);

            StringBuilder mensajeBuilder = new StringBuilder();

            foreach (Producto productoResultado in productosResultado)
            {
                mensajeBuilder.AppendFormat("{0}{1}: {2}", productoResultado.ProductoIdExterno, productoResultado.ColorIdExterno, productoResultado.ErrorMsg);
                mensajeBuilder.Append("<br />");
            }
            return mensajeBuilder;
        }       
        

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect("/App/ProductoList.aspx", true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }
    }
}